import { getCartTotalAPI, postCartAddAPI } from '../../apis/cart'
import { getGoodsDetailAPI } from '../apis/goods'
import { store, storeBehavior } from '../../store/store'
import { urlEncode } from '../../utils/utils'

Page({
  // 导入 store 配置
  behaviors: [storeBehavior],
  // 页面的初始数据
  data: {
    detail: {},
    activeIndex: 0,
    // sku 信息
    isShowSku: false,
    quantity: 1,
    mode: 1,
    // 购物车数量
    cartTotal: 0,
  },
  // 页面加载
  onLoad(query) {
    // query.id 为商品 id
    this.getGoodsDetail(query.goods_id)
    // 获取购物车数量
    this.getCartTotal()
  },
  // 获取购物车商品总数
  async getCartTotal() {
    // 判断是否已登录
    if (!store.isLogin) return
    // 获取购物车数量
    const res = await getCartTotalAPI()
    this.setData({
      cartTotal: res.data.cartTotal,
    })
  },
  // 获取数据
  async getGoodsDetail(id) {
    // 根据 id 获取商品详情
    const res = await getGoodsDetailAPI(id)
    // 保存商品详情
    this.setData({
      detail: res.data.detail,
    })
  },
  // 滑动轮播变化
  onSwiperChange(e) {
    // 更新下标
    this.setData({
      activeIndex: e.detail.current,
    })
  },
  // 打开 sku 弹窗
  onOpenSku({ mark }) {
    this.setData({
      isShowSku: true,
      mode: mark.mode,
    })
  },
  // 关闭 sku 弹窗
  onCloseSku() {
    this.setData({
      isShowSku: false,
    })
  },
  // 数量变化
  onChangeQuantity({ detail }) {
    this.setData({
      quantity: detail,
    })
  },
  async onAddCart() {
    const { quantity, detail } = this.data
    // 执行加入购物车的逻辑
    const res = await postCartAddAPI(detail.goods_id, quantity)
    // 成功提示
    wx.showToast({ title: '加入购物车成功' })
    // 关闭 sku 弹窗
    this.setData({
      isShowSku: false,
      cartTotal: res.data.cartTotal,
    })
  },
  onBuyNow() {
    // 提取数据
    const { quantity, detail } = this.data
    // 隐藏 sku 弹窗
    this.setData({
      isShowSku: false,
    })
    // 转换 url 参数
    const urlParams = urlEncode({
      mode: 'buyNow',
      goodsId: detail.goods_id,
      goodsSkuId: 0,
      goodsNum: quantity,
    })
    // 跳转到订单结算页，并传递参数
    wx.navigateTo({
      url: `/pages_order/checkout/checkout?${urlParams}`,
    })
  },
  // 购物车跳转 - 🔴 避免重复跳转，小程序中页面栈最多十层
  gotoCartPage() {
    // 获取页面栈
    const pages = getCurrentPages()
    // 获取上一页的页面实例
    const prevPage = pages[pages.length - 2]
    // 判断上一页是否为购物车页
    if (prevPage.route.includes('pages/cart/cart')) {
      // 是，返回上一页
      wx.navigateBack()
    } else {
      // 否，跳转到购物车页
      wx.navigateTo({
        url: '/pages/cart/cart2',
      })
    }
  },
})
